import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入页面
// 一级路由：
// 登录
// import Login from '@/views/login'
// 后台系统布局组件
import Layout from '@/views/layout'

// 二级路由：
// 默认首页
import Home from '@/views/home'

// 获取token
import { getToken } from '@/utils/store'
// 文章管理
// import Articles from '@/views/articles'
// 按需导入=》配置路由=》配置的是函数
/**
 * 1. 打包成独立的JS和CSS文件（webpack）
 * 2. 打包完运行页面=》路由匹配路径执行对应配置的函数=》加载对应的JS和CSS代码渲染
 */
const Login = () => import('@/views/login')
const Articles = () => import('@/views/articles')
// 发表文章
const AddArticle = () => import('@/views/addArticle')
// 编辑文章
// import EditArticle from '@/views/editArticle'
// 素材管理
const Image = () => import('@/views/image')
// 评论管理
const Comment = () => import('@/views/comment')
// 粉丝管理
const Fans = () => import('@/views/fans')
// 个人设置
const Setting = () => import('@/views/setting')
// 404页面
const NotFound = () => import('@/views/notFound')

// 处理新版router异常
const originalPush = VueRouter.prototype.push

VueRouter.prototype.push = function push (location) {
  return originalPush.call(this, location).catch(() => { })
}

Vue.use(VueRouter)

const routes = [
  // 后台系统基础骨架
  {
    path: '/',
    // name: 'Layout',
    component: Layout,
    // 重定向
    // redirect: '/home',
    // redirect: { name: 'home' },
    children: [
      // 默认首页
      {
        path: '/',
        name: 'home',
        component: Home
      },
      // 其它功能页面
      {
        path: '/articles',
        name: 'Articles',
        component: Articles
      },
      {
        path: '/addArticle',
        name: 'addArticle',
        component: AddArticle
      },
      {
        path: '/editArticle/:id',
        name: 'editArticle',
        component: AddArticle
      },
      {
        path: '/image',
        name: 'image',
        component: Image
      },
      {
        path: '/comment',
        name: 'comment',
        component: Comment
      },
      {
        path: '/fans',
        name: 'fans',
        component: Fans
      },
      {
        path: '/setting',
        name: 'setting',
        component: Setting
      }
    ]
  },
  // 登录
  {
    path: '/login',
    name: 'Login',
    component: Login
  },
  // 404页面=>匹配不到path=》渲染这个
  {
    path: '*',
    name: 'notFound',
    component: NotFound
  }
]

// 路由实例
const router = new VueRouter({
  routes
})

// 拦截页面访问
/**
 * 后台管理系统=》除了登录页面，其它页面都需要登录后才能访问
 * 1. 获取token
 * 2. 判断是否有token=>有=》正常访问
 *    相反，跳回登录
 */
/**
 * to => 去哪
 * from => 从哪来
 * next => 放行
 */
router.beforeEach((to, from, next) => {
  const token = getToken()?.token
  if (!token && to.path !== '/login') {
    // 跳回登录页
    return next('/login')
  } else if (token && to.path === '/login') {
    return next('/')
  }
  next()
})

export default router
